import { defineConfig, loadEnv } from 'vite';
import path from 'path';
import vue from '@vitejs/plugin-vue';

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd());
  return {
    plugins: [vue()],
    base: './',
    resolve: {
      alias: {
        '@': path.resolve(__dirname, './src')
      },
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
    },
    server: {
      host: '0.0.0.0',
      port: 8000,
      hmr: true, // 热更新
      open: false, // 浏览器自动打开
      ssr: false, // 服务端渲染
      strictPort: true, // 端口被占用时直接退出
      proxy: {
        [env.VITE_REQUEST_API]: {
          target: env.VITE_REQUEST_URL, // 开发环境跨域接口
          changeOrigin: true,
          rewrite: path => path.replace(new RegExp(`^${env.VITE_REQUEST_URL}`), '')
        }
      }
    },
    build: {
      minify: 'terser',
      outDir: 'dist',
      assetsDir: 'assets', // 放置生成的静态资源的目录
      emptyOutDir: true,
      cssCodeSplit: true, // 启用 CSS 代码分割
      reportCompressedSize: false, // 禁用压缩大小报告
      chunkSizeWarningLimit: 2000, // 块大小警告的限制（以 kbs 为单位）
      sourcemap: false,
      terserOptions: {
        compress: {
          drop_console: true,
          drop_debugger: true,
          pure_funcs: ['console.log', 'console.info'] // 移除 console
        }
      },
      rollupOptions: {
        output: {
          manualChunks: {
            'vue-vendor': ['vue', 'vue-router', 'pinia'], // Vue 相关库单独打包
            utils: ['axios'] // 工具库单独打包
          },
          chunkFileNames: 'static/js/[name]-[hash:8].js',
          entryFileNames: 'static/js/[name]-[hash:8].js',
          assetFileNames: 'static/[ext]/[name]-[hash:8].[ext]'
        }
      }
    }
  };
});
